﻿using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.Razor;

namespace Views.Infrastructure {

    public class ColorExpander : IViewLocationExpander {
        private static Dictionary<string, string> Colors
            = new Dictionary<string, string> {
                ["red"] = "Red", ["green"] = "Green", ["blue"] = "Blue"
            };

        public void PopulateValues(ViewLocationExpanderContext context) {

            var routeValues = context.ActionContext.RouteData.Values;
            string color;

            if (routeValues.ContainsKey("id")
                    && Colors.TryGetValue(routeValues["id"] as string, out color)
                    && !string.IsNullOrEmpty(color)) {
                context.Values["color"] = color;
            }
        }

        public IEnumerable<string> ExpandViewLocations(
                ViewLocationExpanderContext context,
                IEnumerable<string> viewLocations) {

            string color;
            context.Values.TryGetValue("color", out color);
            foreach (string location in viewLocations) {
                if (!string.IsNullOrEmpty(color)) {
                    yield return location.Replace("{0}", color);
                } else {
                    yield return location;
                }
            }
        }
    }
}
